home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / dev / sun4.md / devFsOpTable.c < prev    next >
C/C++ Source or Header  |  1992-12-18  |  7KB  |  234 lines

  1. /* 
  2.  * devFsOpTable.c --
  3.  *
  4.  *    The operation tables for the file system devices on Sun-4 hosts.
  5.  *
  6.  * Copyright 1987, 1988 Regents of the University of California
  7.  * Permission to use, copy, modify, and distribute this
  8.  * software and its documentation for any purpose and without
  9.  * fee is hereby granted, provided that the above copyright
  10.  * notice appear in all copies.  The University of California
  11.  * makes no representations about the suitability of this
  12.  * software for any purpose.  It is provided "as is" without
  13.  * express or implied warranty.
  14.  */
  15.  
  16. #ifndef lint
  17. static char rcsid[] = "$Header: /cdrom/src/kernel/Cvsroot/kernel/dev/sun4.md/devFsOpTable.c,v 9.13 92/12/14 11:49:49 mgbaker Exp $ SPRITE (Berkeley)";
  18. #endif not lint
  19.  
  20.  
  21. #include <sprite.h>
  22. #include <dev.h>
  23. #include <devInt.h>
  24. #include <fs.h>
  25. #include <rawBlockDev.h>
  26. #include <devFsOpTable.h>
  27. #include <devTypes.h>
  28.  
  29. /*
  30.  * Device specific include files.
  31.  */
  32.  
  33. #include <devSyslog.h>
  34. #include <devNull.h>
  35. #include <devSCSIDisk.h>
  36. #include <devSCSITape.h>
  37. #include <devSCSIRobot.h>
  38. #include <xylogics450.h>
  39. #include <devNet.h>
  40. #include <devBlockDevice.h>
  41. #include <scsiHBADevice.h>
  42. #include <raidExt.h>
  43. #include <tty.h>
  44. #include <mouse.h>
  45. #include <devTMR.h>
  46. #include <devfb.h>
  47. #include <devVMElink.h>
  48. #include <devATC.h>
  49. #include <devSmem.h>
  50. #include <devXbus.h>
  51. #include <devClientDev.h>
  52.  
  53. static ReturnStatus NoDevice();
  54. static ReturnStatus NullProc();
  55.  
  56.  
  57. /*
  58.  * Device type specific routine table:
  59.  *    This is for the file-like operations as they apply to devices.
  60.  *    DeviceOpen
  61.  *    DeviceRead
  62.  *    DeviceWrite
  63.  *    DeviceIOControl
  64.  *    DeviceClose
  65.  *    DeviceSelect
  66.  *    BlockDeviceAttach
  67.  *    DeviceReopen
  68.  *    DeviceMmap
  69.  */
  70.  
  71.  
  72. DevFsTypeOps devFsOpTable[] = {
  73.     /*
  74.      * Serial lines used to implement terminals.
  75.      */
  76.     {DEV_TERM,       DevTtyOpen, DevTtyRead, DevTtyWrite,
  77.              DevTtyIOControl, DevTtyClose, DevTtySelect,
  78.              DEV_NO_ATTACH_PROC, NoDevice, NullProc},
  79.     /*
  80.      * The system error log.  If this is not open then error messages go
  81.      * to the console.
  82.      */
  83.     {DEV_SYSLOG,    Dev_SyslogOpen, Dev_SyslogRead, Dev_SyslogWrite,
  84.             Dev_SyslogIOControl, Dev_SyslogClose, Dev_SyslogSelect,
  85.             DEV_NO_ATTACH_PROC, Dev_SyslogReopen, NullProc},
  86.     /*
  87.      * SCSI Worm interface:  this device doesn't exist anymore.
  88.      */
  89.     {DEV_SCSI_WORM, Dev_TimerOpen, Dev_TimerRead, NullProc,
  90.                     Dev_TimerIOControl, NullProc, NullProc,
  91.                     DEV_NO_ATTACH_PROC, NoDevice, NullProc},
  92.     /*
  93.      * The following device number is unused.
  94.      */
  95.     {DEV_PLACEHOLDER_2, NoDevice, NullProc, NullProc,
  96.             Dev_NullIOControl, NullProc, NullProc,
  97.             DEV_NO_ATTACH_PROC, NoDevice, NullProc},
  98.     /*
  99.      * New SCSI Disk interface.
  100.      */
  101.     {DEV_SCSI_DISK, DevRawBlockDevOpen, DevRawBlockDevRead,
  102.             DevRawBlockDevWrite, DevRawBlockDevIOControl, 
  103.             DevRawBlockDevClose, NullProc, DevScsiDiskAttach,
  104.             DevRawBlockDevReopen, NullProc},
  105.     /*
  106.      * SCSI Tape interface.
  107.      */
  108.     {DEV_SCSI_TAPE, DevSCSITapeOpen, DevSCSITapeRead, DevSCSITapeWrite,
  109.             DevSCSITapeIOControl, DevSCSITapeClose, NullProc,
  110.             DEV_NO_ATTACH_PROC, NoDevice, NullProc},
  111.     /*
  112.      * /dev/null
  113.      */
  114.     {DEV_MEMORY,    NullProc, Dev_NullRead, Dev_NullWrite,
  115.             Dev_NullIOControl, NullProc, Dev_NullSelect,
  116.             DEV_NO_ATTACH_PROC, NullProc, NullProc},
  117.     /*
  118.      * Xylogics 450 disk controller.
  119.      */
  120.     {DEV_XYLOGICS, DevRawBlockDevOpen, DevRawBlockDevRead,
  121.             DevRawBlockDevWrite, DevRawBlockDevIOControl, 
  122.             DevRawBlockDevClose, NullProc, DevXylogics450DiskAttach,
  123.             DevRawBlockDevReopen, NullProc},
  124.     /*
  125.      * Network devices.  The unit number specifies the ethernet protocol number.
  126.      */
  127.     {DEV_NET,      DevNet_FsOpen, DevNet_FsRead, DevNet_FsWrite, 
  128.            DevNet_FsIOControl, DevNet_FsClose, DevNet_FsSelect, 
  129.            DEV_NO_ATTACH_PROC, DevNet_FsReopen, NullProc},
  130.     /*
  131.      * Raw SCSI HBA interface.
  132.      */
  133.     {DEV_SCSI_HBA, DevSCSIDeviceOpen, Dev_NullRead, Dev_NullWrite,
  134.             DevSCSIDeviceIOControl, DevSCSIDeviceClose, Dev_NullSelect,
  135.             DEV_NO_ATTACH_PROC, NoDevice, NullProc},
  136.     /*  
  137.      * RAID device.
  138.      */ 
  139.     {DEV_RAID, DevRawBlockDevOpen, DevRawBlockDevRead,
  140.                     DevRawBlockDevWrite, DevRawBlockDevIOControl,
  141.                     DevRawBlockDevClose, NullProc, DevRaidAttach,
  142.                     DevRawBlockDevReopen, NullProc},
  143.     /*  
  144.      * Debug device. (useful for debugging RAID device)
  145.      */ 
  146.     {DEV_DEBUG, DevRawBlockDevOpen, DevRawBlockDevRead,
  147.                     DevRawBlockDevWrite, DevRawBlockDevIOControl,
  148.                     DevRawBlockDevClose, NullProc, DevDebugAttach,
  149.                     DevRawBlockDevReopen, NullProc},
  150.     /*
  151.      * Event devices for window systems.
  152.      */
  153.     {DEV_MOUSE,    DevMouseOpen, DevMouseRead, DevMouseWrite,
  154.            DevMouseIOControl, DevMouseClose, DevMouseSelect,
  155.            DEV_NO_ATTACH_PROC, NoDevice, NullProc},
  156.     /*
  157.      * Frame buffer device.
  158.      */
  159.     {DEV_GRAPHICS, DevFBOpen, NullProc, NullProc,
  160.                    DevFBIOControl, DevFBClose, NullProc,
  161.                    DEV_NO_ATTACH_PROC, NoDevice, DevFBMMap},
  162.  
  163.     /*
  164.      * /dev/smem
  165.      */
  166.     {DEV_SMEM,     NullProc, Dev_SmemRead, Dev_SmemWrite,
  167.                    Dev_SmemIOControl, NullProc, Dev_SmemSelect,
  168.                    DEV_NO_ATTACH_PROC, NullProc, NullProc},
  169.      
  170.     /*
  171.      * The audio device may exist for the sun4.  If so, ignore it for now.
  172.      */
  173.     {DEV_AUDIO, NoDevice, NullProc, NullProc,
  174.         Dev_NullIOControl, NullProc, NullProc,
  175.         DEV_NO_ATTACH_PROC, NoDevice, NullProc},
  176.     /*
  177.      * VME link board device.
  178.      */
  179.     {DEV_VMELINK, DevVMElinkOpen, DevVMElinkRead, DevVMElinkWrite,
  180.            DevVMElinkIOControl, NullProc, NullProc,
  181.            DEV_NO_ATTACH_PROC, NoDevice},
  182.     /*
  183.      * These devices don't exist on a sun4.
  184.      */
  185.     {17, NullProc, NullProc, NullProc, NullProc, NullProc, NullProc, 
  186.            DEV_NO_ATTACH_PROC, NullProc, NullProc},
  187.     /*
  188.      * The following device number is unused.
  189.      */
  190.     {DEV_ATC, DevRawBlockDevOpen, DevRawBlockDevRead,
  191.                     DevRawBlockDevWrite, DevRawBlockDevIOControl,
  192.                     DevRawBlockDevClose, NullProc, DevATCDiskAttach,
  193.                     DevRawBlockDevReopen, NullProc},
  194.     /*
  195.      * The following device number is unused.
  196.      */
  197.     {DEV_PLACEHOLDER_5, NoDevice, NullProc, NullProc,
  198.             NullProc, NullProc, NullProc, 
  199.             DEV_NO_ATTACH_PROC, NoDevice, NullProc},
  200.     /*
  201.      * The "jukebox", or tape/disk robot device.
  202.      */
  203.     {DEV_SCSI_ROBOT, DevSCSIExbRobotOpen, NullProc, NullProc,
  204.                 DevSCSIExbRobotIOControl, DevSCSIExbRobotClose,
  205.                 NullProc, DEV_NO_ATTACH_PROC, NoDevice, NullProc},
  206.     /*
  207.      * Xbus board
  208.      */
  209.     {DEV_XBUS, DevXbusOpen, NullProc, NullProc, DevXbusIOControl,
  210.      NullProc, NullProc, DEV_NO_ATTACH_PROC, NoDevice, NullProc},
  211.     /*
  212.      * /dev/clients
  213.      */
  214.     {DEV_CLIENT_STATE,  DevClientStateOpen, DevClientStateRead, NullProc,
  215.                    DevClientStateIOControl, DevClientStateClose,
  216.                    NullProc, DEV_NO_ATTACH_PROC,
  217.                    NoDevice, NullProc},
  218. };
  219.  
  220. int devNumDevices = sizeof(devFsOpTable) / sizeof(DevFsTypeOps);
  221.  
  222. static ReturnStatus
  223. NullProc()
  224. {
  225.     return(SUCCESS);
  226. }
  227.  
  228.  
  229. static ReturnStatus
  230. NoDevice()
  231. {
  232.     return(FS_INVALID_ARG);
  233. }
  234.